package org.lanqiao.tjut.action;

import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.lanqiao.tjut.bean.StudentBean;
import org.lanqiao.tjut.myUtils.MyUtils;
import org.lanqiao.tjut.service.IStudentInfoService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class StudentInfoAction {

	/*
	 * 使用注解@Resource层，依赖注入该属性的值，依赖于与变量名同名的一个注解对象
	 * 注意：该变量的声明使用接口，该变量通过依赖关系注入的对象值是该接口的一个具体的实现类的实例对象， 此处使用了面向接口的编程思想
	 */
	@Resource
	private IStudentInfoService stuS;

	@RequestMapping("/StudentInfoAddAction")
	public String saveStudetnInfo(HttpServletRequest request, StudentBean stuB) {
		// 打印表单数据信息
		MyUtils.logger.info("前台表单数据：" + stuB.toString());

		// 在保存实体类数据之前，先进行文件上传操作
		MyUtils.uploadMultiFileByRequest(request, stuB, "uploadfiles/stuImgs/", "stuImg");
		// 调用service层进行数据新增处理
		int i = stuS.saveOrUpdateStudentInfo(stuB);
		if (i > 0) {
			// 新增成功
			return "studentInfoManager/studentInfoAddDetail";
		} else {
			// 新增失败，跳到错误提示页面
			return "error";
		}
	}

	@ResponseBody // 表示该方法是进行ajax响应处理
	@RequestMapping("/stuAjaxQueryAction")
	public List<StudentBean> selectStudendInfoByParams(StudentBean stuB) {
		// 调用service进行数据库查询操作
		List<StudentBean> lstStus = stuS.queryStudentInfoByParams(stuB);
		return lstStus;
	}

	/**
	 * 通过学生主键获取学生信息
	 * 
	 * @param sid
	 *            学生主键
	 * @return 学生信息
	 */
	@ResponseBody // 表示该方法是进行ajax响应处理
	@RequestMapping("/ajaxQueryStuInfoByIdAction")
	public StudentBean selectByPrimaryKey(Long sid) {
		StudentBean stuB = stuS.selectByPrimaryKey(sid);
		return stuB;
	}

	/**
	 * 唯一性验证
	 * 
	 * @param stuName
	 * @param stuAge
	 * @return 验证结果
	 */
	@ResponseBody // 表示该方法是进行ajax响应处理
	@RequestMapping("/isStuNameUniqueAction")
	public boolean isStuNameUnique(@RequestParam("username") String stuName, int stuAge) {
		// TODO 调用service进行用户名唯一性验证的数据库查询操作
		MyUtils.logger.info("stuName:" + stuName + ";stuAge:" + stuAge);
		return true;
	}

	/**
	 * 逻辑删除操作，删除之后并进行查询操作
	 * 
	 * @param delIndex
	 *            删除的id记录
	 * @param stuB
	 *            查询条件
	 * @return 返回查询结果集json对象
	 */
	@ResponseBody // 表示该方法是进行ajax响应处理
	@RequestMapping("/StudentInfoAjaxDeleteAction")
	public List<StudentBean> isStuNameUnique(Long delIndex, StudentBean stuB) {
		// 获取删除记录的id
		// 如果删除记录不为null，则进行删除操作
		if (delIndex != null && !delIndex.equals("")) {
			// 进行删除操作
			// 调用Service层进行删除操作
			stuS.deleteStudentInfoById(delIndex);
		}
		// 无论删除成功与否，都要在进行ajax查询处理
		// 获取查询表单的实体类参数
		// 调用service进行数据库查询操作
		List<StudentBean> lstStus = stuS.queryStudentInfoByParams(stuB);
		return lstStus;
	}

	@RequestMapping("/dispatch2ModifyPage")
	public String dispatch2ModifyPage(HttpServletRequest request, String jp, String sid) {
		// 缓存需要修改的学生的id，传递给修改页面
		request.getSession().setAttribute("sid", sid);
		// 跳转到学生修改页面
		return jp;
	}
}
